From c1e28224aa2e1450031669d9a7e359b63e04687d Mon Sep 17 00:00:00 2001 From: Volpeon Date: Wed, 22 Jul 2026 19:40:59 +0200 Subject: Init --- src/pages/releases/[version].tsx | 100 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/pages/releases/[version].tsx (limited to 'src/pages/releases/[version].tsx') diff --git a/src/pages/releases/[version].tsx b/src/pages/releases/[version].tsx new file mode 100644 index 0000000..84d807a --- /dev/null +++ b/src/pages/releases/[version].tsx @@ -0,0 +1,100 @@ +import { Page, PipelineStageError } from "corvos"; + +import { strapiLoader } from "$/deps/strapi.tsx"; +import { releaseStrapiSchema } from "$/schemas/releases.ts"; +import { BaseLayout } from "$/ui/base/BaseLayout.tsx"; +import { ReleaseCard } from "$/ui/components/ReleaseCard.tsx"; +import { SiteHeader } from "$/ui/components/SiteHeader.tsx"; +import { CardList } from "$/ui/layouts/CardList.tsx"; +import { Container } from "$/ui/layouts/Container.tsx"; +import { HList } from "$/ui/layouts/HList.tsx"; +import { ActionButton } from "$/ui/objects/ActionButton.tsx"; +import { Badge } from "$/ui/objects/Badge.tsx"; +import { Body } from "$/ui/objects/Body.tsx"; +import { Divider } from "$/ui/objects/Divider.tsx"; +import { Heading } from "$/ui/objects/Heading.tsx"; +import { Icon } from "$/ui/objects/Icon.tsx"; +import site from "@/corvos.config.ts"; + +export const pages = site.$.pageGenerator(async function* () { + for await (const item of strapiLoader.loadCollection("corvos-releases", releaseStrapiSchema, { + "populate[0]": "files", + "sort[0]": "date:desc", + })) { + if (item instanceof PipelineStageError) { + yield item; + } else { + yield new Page(".strapi", item.notes ?? [], { + ...item, + title: `Corvos ${item.version}`, + type: "release" as const, + }); + } + } +}); + +export const template = site.$.template({ type: "release" }, (page, pages) => { + const query = site.$.query(pages); + + const feed = query.type(".rss").match({ type: "releases" }).one(); + + const prev = query.type(".html").match({ type: "release" }).prev(page); + const next = query.type(".html").match({ type: "release" }).next(page); + + return ( + + + } + level="quiet" + pill + title="RSS Feed" + /> + + } + > +
+ {page.data.title} +
+
+ + + +
  • + + + +
  • +
    + + + {page.data.title} + + + {{ __html: page.content }} +
    + + + + + + {prev && } + {next && } + + +
    + ); +}); -- cgit v1.3.1